home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
parallax
/
more_exa.tar
/
more
/
Graphics
/
Rgb2tiff.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-06-27
|
8KB
|
304 lines
#include <stdio.h>
#include <ctype.h>
#define Length 65536 /* entspricht HEX: 0001 0000 */
FILE *fi, *fo;
char zahl[10];
int
getword (in)
FILE *in;
{
int i;
int j=0, k = 0;
zahl[j] = '\0';
while ((i = getc (in)) != EOF){
if (i!=' ' && i!='\t' && i!='\n') {
zahl[j++] = i;
} else if (j > 0) {
zahl[j] = '\0';
return (1);
}
}
return (0);
}
main ()
{
int i,j;
char output[20], input[20]; /* Aus- und Eingabedatei */
int c;
int b1, b, l1, l; /* Breite, Laenge */
int sl2, sl1, sl, sbco2, sbco1, sbco; /* Striplaenge, Striplaengenoffset */
int si1, si, so2,so1, so; /* strips/img, stripoffsets */
int rs2, rs1, rs; /* rows/strip */
int onestrip = 0; /* =0: mehrere Strips,
=1: einStrip */
int wordcount;
printf ("Eingabedatei:");
scanf ("%s", input);
if (!(fi = fopen (input, "r"))) {
printf ("File kann nicht geoeffnet werden");
exit(1);
}
printf ("Ausgabedatei:");
scanf ("%s", output);
if (!(fo = fopen (output, "w"))) {
printf ("File kann nicht geoeffnet werden");
exit (1);
}
getword (fi);
b = atoi (zahl);
getword (fi);
l = atoi (zahl);
printf ("Laenge: %d\n", l);
printf ("Breite: %d\n", b);
rs = (Length + b*3)/(b*3);
printf ("rs: %d\n", rs);
si = (l + rs - 1)/rs;
printf ("si: %d\n", si);
if (si>255) {
si1 = si/256;
si = si%256;
} else {
si1 = 0;
if (si == 1) {
onestrip = 1;
printf ("onestrip\n");
}
}
if (!onestrip) { /* maximale Striplaenge */
sl = rs*b*3;
so = 204 + si*8;
} else { /* gesamtes Bild in einem Strip */
sl = b*l*3;
so = 204;
}
if (rs>255){
rs1 = rs/256;
if (rs1>255){
rs2 = rs1/256;
rs1 = rs1%256;
} else
rs2 = 0;
rs = rs%256;
} else {
rs2 = 0;
rs1 = 0;
}
if (b>255) {
b1 = b/256;
b = b%256;
} else
b1 = 0;
if (l>255) {
l1 = l/256;
l = l%256;
} else
l1 = 0;
if (so>255) {
so1 = so/256;
so = so%256;
} else
so1 = 0;
if (sl>255){
sl1 = sl/256;
if (sl1>255){
sl2 = sl1/256;
sl1 = sl1%256;
} else
sl2 = 0;
sl = sl%256;
} else {
sl2 = 0;
sl1 = 0;
}
if (!onestrip) { /* Offset fuer Striplaengen */
if ((sbco = 204+si*4) > 255) {
sbco1= sbco/256;
sbco = sbco%256;
} else
sbco1 = 0;
sbco2 = 0;
} else {
sbco = sl;
sbco1 = sl1;
sbco2 = sl2; /* Striplaenge */
}
putc (77, fo); putc (77, fo); putc (0, fo); putc (42, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (8, fo); /* offset */
putc (0, fo); putc (14, fo); /* Anz. Eintraege */
/* 4d4d 002a 0000 0008 000e*/
putc (0, fo); putc (254, fo); putc (0, fo); putc (4, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (0, fo);
/* 00fe 0004 0000 0001 0000 0000*/
putc (1, fo); putc (0, fo); putc (0, fo); putc (3, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
putc (b1, fo); putc (b, fo); putc (0, fo); putc (0, fo);
/* 0100 0003 0000 0001 b1 b 0000*/
putc (1, fo); putc (1, fo); putc (0, fo); putc (3, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
putc (l1, fo); putc (l, fo); putc (0, fo); putc (0, fo);
/* 0101 0003 0000 0001 l1 lx 0000 Laenge*/
putc (1,fo); putc (2,fo); putc (0,fo); putc (3,fo);
putc (0,fo); putc (0,fo); putc (0,fo); putc (3,fo);
putc (0,fo); putc (0,fo); putc (0,fo); putc (198,fo);
/* 0102 0003 0000 0003 0008 0000 Bit/Sampl*/
putc (1,fo); putc (3,fo); putc (0,fo); putc (3,fo);
putc (0,fo); putc (0,fo); putc (0,fo); putc (1,fo);
putc (0,fo); putc (1,fo); putc (0,fo); putc (198,fo);
/* 103 Compression */
putc (1,fo); putc (6,fo); putc (0,fo); putc (3,fo);
putc (0,fo); putc (0,fo); putc (0,fo); putc (1,fo);
putc (0,fo); putc (2,fo); putc (0,fo); putc (198,fo);
/* 0106 0000 0001 0002 0000 RGB */
putc (1,fo); putc (17,fo); putc (0,fo); putc (4,fo);
putc (0,fo); putc (0,fo); putc (si1,fo); putc (si,fo);
putc (0,fo); putc (0,fo); putc (0,fo); putc (204,fo);
/* 0111 0004 0000 0001 0000 0070 Offset */
putc (1,fo); putc (21,fo); putc (0,fo); putc (3,fo);
putc (0,fo); putc (0,fo); putc (0,fo); putc (1,fo);
putc (0,fo); putc (3,fo); putc (0,fo); putc (190,fo);
/* 0115 0003 0000 0001 0003 0000 Sampl/Pix*/
putc (1, fo); putc (22, fo); putc (0, fo); putc (4, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
putc (0, fo); putc (rs2, fo); putc (rs1, fo); putc (rs, fo);
/* 116 rows/strip */
putc (1, fo); putc (23, fo); putc (0, fo); putc (4, fo);
putc (0, fo); putc (0, fo); putc (si1, fo); putc (si, fo);
putc (0, fo); putc (sbco2, fo); putc (sbco1, fo); putc (sbco, fo);
/* 0117 stripbytes */
putc (1, fo); putc (26, fo); putc (0, fo); putc (5, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (182, fo);
/*11a x-Resol. */
putc (1, fo); putc (27, fo); putc (0, fo); putc (5, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (190, fo);
/*11b y-Resol. */
putc (1,fo); putc (28,fo); putc (0,fo); putc (3,fo);
putc (0,fo); putc (0,fo); putc (0,fo); putc (1,fo);
putc (0,fo); putc (1,fo); putc (0,fo); putc (198,fo);
/* 011c 0003 0000 0001 0001 0000 Sequ.Ablage*/
putc (1, fo); putc (40, fo); putc (0, fo); putc (3, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
putc (0, fo); putc (2, fo); putc (0, fo); putc (190, fo);
/*128 Res. Unit */
putc (0,fo);
putc (0,fo);
putc (0,fo);
putc (0,fo);
/* Null-Zeiger */
putc (0, fo); putc (0, fo); putc (0, fo); putc (72, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
/* X-Aufloesung */
putc (0, fo); putc (0, fo); putc (0, fo); putc (72, fo);
putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
/* Y-Aufloesung */
putc (0, fo); putc (8, fo);
putc (0, fo); putc (8, fo);
putc (0, fo); putc (8, fo);
/* Bits/Sample */
if (!onestrip) {
/* Stripoffsets */
so2 = 0;
for (i= 0; i< si; i++){
putc (0, fo); putc (so2, fo); putc (so1, fo); putc (so, fo);
so = so+sl+256*sl1+65536*sl2;
if (so>255) {
so1 = so1 + so/256;
if (so1 > 255 ){
so2 = so2 + so1/256;
so1 = so1%256;
}
so = so%256;
}
}
/* Striplaengen */
for (i=1; i<si; i++){
putc (0, fo); putc (sl2, fo); putc (sl1, fo); putc (sl, fo);
printf ("i: %d, Striplaenge: %d %d %d\n", i, sl2, sl1, sl);
}
b = b1*256 + b;
l = l1*256 + l;
sl = b*l*3 - (si-1)*(sl+ 256*sl1 + sl2*256*256);
sl1 = 0;
sl2 = 0;
if (sl>255){
sl1 = sl/256;
if (sl1>255){
sl2 = sl1/256;
sl1 = sl1%256;
} else
sl2 = 0;
sl = sl%256;
}
printf ("i: %d, Striplaenge: %d %d %d\n", i, sl2, sl1, sl);
putc (0, fo); putc (sl2, fo); putc (sl1, fo); putc (sl, fo);
}
wordcount = 1;
while (getword (fi) && wordcount <= b*l*3){
c = atoi(zahl);
putc (c, fo);
wordcount ++;
}
fclose (fi);
fclose (fo);
}